#include "Processbar.h"
#include <string.h>
#include <unistd.h>

//void ForTest()
//{
//    printf("this is for test\n");
//    printf("this is for test\n");
//    printf("this is for test\n");
//    printf("this is for test\n");
//    printf("this is for test\n");
//    printf("this is for test\n");
//}



#define Length 101
#define Style '#'
const char* lable="|/-\\";

////version 1
//void ProcBar()
//{
//  char bar[Length];
//  memset(bar,'\0',sizeof(bar));
//  int len=strlen(lable);
//
//  int cnt=0;
//  while(cnt<=100)
//  {
//    printf("[%-100s][%-3d%%][%c]\r",bar,cnt,lable[cnt%len]);
//    fflush(stdout);
//    bar[cnt++]=Style;
//    usleep(200000);
//  }
//
//  printf("\n");
//}

////version 2
////配合场景使用
//进度条每执行一次循环就刷新一次，会出现闪烁（我还挺喜欢这个的）
//void ProcBar(double total,double current)
//{
//  char bar[Length];
//  memset(bar,'\0',sizeof(bar));
//  int len=strlen(lable);
//
//  int cnt=0;
//  double rate=(current*100.0)/total;
//  int loop_count=(int)rate;
//  while(cnt<=loop_count)
//  {
//    printf("[%-100s][%.1lf%%][%c]\r",bar,rate,lable[cnt%len]);
//    fflush(stdout);  
//    bar[cnt++]=Style;
//    //usleep(200000);  //这个也不需要了，在另一个调它的函数中有
//  }
//
//  //printf("\n");
//}

//version 3
//配合场景使用
//每此调用函数时直接将bar拼接起来，循环执行完后再刷新，这样就不会出现闪烁
void ProcBar(double total,double current)
{
  char bar[Length];
  memset(bar,'\0',sizeof(bar));
  int len=strlen(lable);

  int cnt=0;
  double rate=(current*100.0)/total;
  int loop_count=(int)rate;
  while(cnt<=loop_count)
  {
    bar[cnt++]=Style;
    //usleep(200000);  //这个也不需要了，在另一个调它的函数中有
  }
  printf("[%-100s][%.1lf%%][%c]\r",bar,rate,lable[cnt%len]);
  fflush(stdout);  

  //printf("\n");
}
